package com.sun.lib.util;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * md5加密
 * 
 * @author xiayuchong
 * @date 2014-11-3
 */
public class MD5Utils {

	public static String md5(String string) {
		if (string == null)
			return "";
		//if (string.length() == 32) {
			// 已经加密，不需再加密
			//return string;
		//}
		byte[] hash;
		try {
			hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));
		} catch (NoSuchAlgorithmException e) {
			throw new RuntimeException("Huh, MD5 should be supported?", e);
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException("Huh, UTF-8 should be supported?", e);
		}

		StringBuilder hex = new StringBuilder(hash.length * 2);
		for (byte b : hash) {
			if ((b & 0xFF) < 0x10)
				hex.append("0");
			hex.append(Integer.toHexString(b & 0xFF));
		}
		return hex.toString();
	}

	// public static String md5two(String string) {
	// byte[] hash;
	// try {
	// hash = MessageDigest.getInstance("MD5").digest(
	// string.getBytes("UTF-8"));
	// } catch (NoSuchAlgorithmException e) {
	// throw new RuntimeException("Huh, MD5 should be supported?", e);
	// } catch (UnsupportedEncodingException e) {
	// throw new RuntimeException("Huh, UTF-8 should be supported?", e);
	// }
	//
	// StringBuilder hex = new StringBuilder(hash.length * 2);
	// for (byte b : hash) {
	// if ((b & 0xFF) < 0x10)
	// hex.append("0");
	// hex.append(Integer.toHexString(b & 0xFF));
	// }
	// return hex.toString();
	// }

	// private String getMD5Str(String str) {
	// if (str == null) {
	// return null;
	// }
	// MessageDigest messageDigest = null;
	//
	// try {
	// messageDigest = MessageDigest.getInstance("MD5");
	// messageDigest.reset();
	//
	// messageDigest.update(str.getBytes("UTF-8"));
	// } catch (NoSuchAlgorithmException e) {
	// System.exit(-1);
	// } catch (UnsupportedEncodingException e) {
	// e.printStackTrace();
	// }
	//
	// byte[] byteArray = messageDigest.digest();
	// StringBuffer md5StrBuff = new StringBuffer();
	//
	// for (int i = 0; i < byteArray.length; i++) {
	// if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
	// md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
	// else
	// md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
	// }
	// // 16位加密，从第9位到25位
	// return md5StrBuff.toString().toUpperCase();
	// }
	// public final static String MD5(String s) {
	// char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
	// 'A', 'B', 'C', 'D', 'E', 'F' };
	// try {
	// byte[] btInput = s.getBytes();
	// // 获得MD5摘要算法的 MessageDigest 对象
	// MessageDigest mdInst = MessageDigest.getInstance("MD5");
	// // 使用指定的字节更新摘要
	// mdInst.update(btInput);
	// // 获得密文
	// byte[] md = mdInst.digest();
	// // 把密文转换成十六进制的字符串形式
	// int j = md.length;
	// char str[] = new char[j * 2];
	// int k = 0;
	// for (int i = 0; i < j; i++) {
	// byte byte0 = md[i];
	// str[k++] = hexDigits[byte0 >>> 4 & 0xf];
	// str[k++] = hexDigits[byte0 & 0xf];
	// }
	// return new String(str);
	// } catch (Exception e) {
	// e.printStackTrace();
	// return null;
	// }
	// }
}
